/**
 * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package cn.afterturn.easypoi.excel.export.styler;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;

import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.entity.params.ExcelForEachParams;
import org.apache.poi.util.Removal;

import java.util.Map;

/**
 * Excel导出样式接口
 *
 * @author JueYue 2015年1月9日 下午5:32:30
 */
public interface IExcelExportStyler {

    /**
     * 列表头样式
     */
    CellStyle getHeaderStyle(short headerColor);

    /**
     * 标题样式
     */
    CellStyle getTitleStyle(short color);

    /**
     * 获取样式方法
     */
    CellStyle getStyles(boolean parity, ExcelExportEntity entity);

    /**
     * 获取样式方法
     *
     * @param dataRow 数据行
     * @param obj     对象
     * @param data    数据
     */
    CellStyle getStyles(Cell cell, int dataRow, ExcelExportEntity entity, Object obj, Object data);

    /**
     *
     * @param dataRow 列序号
     * @param dataCol 行序号
     * @param map 数据map对象
     * @param val 对应填充的值
     * @param templateString 对应模板单元格内容
     * @return
     */
    CellStyle getTemplateMapStyles(int dataRow, int dataCol, Map<String, Object> map, Object val, String templateString);

    /**
     * 获取 模板导入 集合数据样式
     * @param data  对应该行记录对象
     * @param listKey map中集合的key
     * @param mapCellKey  对应该单元格 的key
     * @param cellVal 对应单元格 匹配到的值
     * @param dataCol 对应 列序号
     * @param rowIndex 对应行 序号
     * @param listIndex 对应 该集合中的序号
     * @return
     */
    CellStyle getTemplateMapForeachStyles(Object data, String listKey, String mapCellKey, String cellVal, int dataCol, Integer rowIndex, Integer listIndex);

    /**
     * 获取样式方法
     *
     * @param dataRow 数据行
     * @param dataCol 数据当前列
     * @param entity 当前列对象
     * @param obj     当前行数据
     * @param data    数据
     */
    CellStyle getStyles(int dataRow, int dataCol, ExcelExportEntity entity, Object obj, Object data);

    /**
     * 模板使用的样式设置
     */
    CellStyle getTemplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams);

}
